Spring 您所在的位置:网站首页 @configuration @value 取不到 Spring

Spring

2024-03-21 17:33| 来源: 网络整理| 查看: 265

文章目录 静态变量赋值对象注入方式@ConfigurationProperties 方式复杂属性的读取配置文件接受配置的配置对象启动类测试结果 本文介绍工作中用到的 @Value 读取配置属性的三种方式. 先决条件: 使用 @Value 读取属性值的类对象需要交给 Spring 容器管理

静态变量赋值

直接通过 ApplicationConfiguration.CONTEXT_PATH 的方式即可引用到. 这种方式, 需要引用这个 CONTEXT_PATH 的目标类不需要交给 Spring 容器管理, 也不需要在业务代码中注入配置属性. 目标对象无论是通过 new 还是 @Autowired, 都能获取到这个配置值

@Component public final class ApplicationConfiguration { /** * 系统上下文, 形如 /dynamic-authorization */ public static String CONTEXT_PATH; @Value("${server.servlet.context-path}") public void setContextPath(String contextPath) { CONTEXT_PATH = contextPath; } private ApplicationConfiguration() {} } 对象注入方式

值得一提的是, 采用这种方式如果目标对象是通过 new 创建的, 也是无法获取到配置值的. 目标类需要被 Spring 容器管理, 通过以下方式引用:

@Value("${server.servlet.context-path}") private String contextPath; @ConfigurationProperties 方式

这种方式要麻烦点, 首先, 需要启用 Annotation Processor; 其次, 我们还是需要一个配置类: @ConfigurationProperties 的 prefix 指定配置文件里 Key 的前缀, 不可省略. 并且对于 server.servlet.context-path 这种多级属性, 需要用 @NestedConfigurationProperty 标注, 新建一个二级配置对象, 并赋给 ApplicationConfiguration 的成员属性, 这里图省事就写成静态内部类了. 最后同样的, 引用该配置类的目标类需要被 Spring 容器管理, 并且目标类不能用 new 的方式创建.

@Component @ConfigurationProperties(prefix = "server") public final class ApplicationConfiguration { @NestedConfigurationProperty private final Servlet servlet = new Servlet(); public Servlet getServlet() { return servlet; } public static class Servlet { private String contextPath; public String getContextPath() { return contextPath; } public void setContextPath(String contextPath) { this.contextPath = contextPath; } } private ApplicationConfiguration() {} } 复杂属性的读取

现在我们在用另外一种方式读取复合配置对象, (利用了 @ConfigurationPropertiesScan). 涉及到了简单 List, 复杂 List 和 复杂 Map 的读取.

配置文件 custom: third: description: 三方配置 client-id: a-certain-third-id client-secret: a-certain-third-secret param: - id: 4e80bc144f2507323a348fca15db7c48 code: MSAD - id: fbf501400952c4bb7959d8836693c30f code: VBNM white-list: - 10.10.10.10 - 10.10.10.11 - 10.10.10.12 - 10.10.10.13 user: caplike: abbreviation: LiKe reg-date: 2021-01-14 server: servlet: context-path: /value port: 15968 接受配置的配置对象 @Data @ConfigurationProperties(prefix = "custom.third") public class ThirdConfig { private String description; private String clientId; private String clientSecret; private List param; // ----------------------------------------------------------------------------------------------------------------- private List whiteList; @Data @NoArgsConstructor public static class Param { private String id; private String code; } // ----------------------------------------------------------------------------------------------------------------- private Map user; @Data @NoArgsConstructor public static class UserDetail { private String abbreviation; private String regDate; } } 启动类 @SpringBootApplication @ConfigurationPropertiesScan(basePackageClasses = {ThirdConfig.class}) public class ValueApplication { public static void main(String[] args) { SpringApplication.run(ValueApplication.class, args); } } 测试结果

在这里插入图片描述

Updated.2021-1-14 14:10:14

- END -*



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有